Ana içeriğe geç

Methodlar

Methodlar fonksiyonlara benzerlik gösterse de struct içerisinde tanımlanmalarından dolayı farklılık gösterirler. Metotlar her zaman ilk parametre olarak self değerine yani kendilerine sahiptir. Bu da struct yapısını çağıran yapıya işaret etmektedir.

Hadi bir karenin içeriğini ifade eden bir struct oluşturalım.

struct Kare{
genislik: u32,
uzunluk: u32,
}

Sonrasında bu kare tipine sahip bir değişkeni main() içerisinde oluşturalım.

fn main(){
let kare1 = Kare{
genislik: 5,
uzunluk: 5,
}
}

Rust içerisinde bir struct yapısına method eklemek için impliment kelimesinin kısaltması olan impl anahtar kelimesini kullanabiliriz. Sonrasında da hangi struct yapısına methodumuzu ekleyeceksek o yapının ismini vermemiz gerekmektedir.

impl Kare{

}

Üstte ifade edildiği şekilde oluşturulduktan sonra içerisine methodlarımızı fonksiyon olarak verebiliriz. Unutmamamız gereken şey bu yapının ilk parametre olarak self yani struct yapısının kendisini aldığıdır.

impl Kare{
fn alan_bul(&self) -> u32{
self.genislik * self.uzunluk
}
}

Bu şekilde kendi içersinde daha önceden tanımladığımız değerlere erişebilir ve fonksiyonu çalıştırabiliriz. Fonksiyonu çalıştırmak için Kare struct'ı ile oluşturduğumuz değişkene . koyarak fonksiyonun ismini yazabiliriz.

fn main(){
let kare1 = Kare{
genislik: 5,
uzunluk: 5,
};
println!("{}", kare1.alan_bul())
}

Rust içerisinde impl ile struct'ların içerisinde istediğimiz kadar method oluşturabiliriz.

Peki bir mutable yani değiştirilebilir struct yapmak istesek nasıl yapacağız? Bu işlemi yapmak için kare1 olarak tanımladığımız değeri mutable yapmamız gerekmektedir.

fn main(){
let mut kare1 = Kare{
genislik: 5,
uzunluk: 5,
};
println!("{}", kare1.alan_bul())
}

Sonrasında bu işlemi yeni bir method oluşturarak halledebiliriz.

impl Kare{
fn alan_bul(&self) -> u32{
self.genislik * self.uzunluk
}
fn uzunluk_degistir(&mut self, yeni_uzunluk: u32){
self.uzunluk = yeni_uzunluk;
}
}

Sonrasında oluşturduğumuz bu methodu main() içerisinde istediğimiz uzunluk değeri ile değiştirebiliriz.

fn main(){
let mut kare1 = Kare{
genislik: 5,
uzunluk: 5,
};
println!("{}", kare1.uzunluk()) // 5
kare1.uzunluk_degistir(10);
println!("{}", kare1.uzunluk()) // 10
}

Ayrıca mutable bir referans kullanmaya dikkat etmemiz gerekmektedir.